/**
 * DuzaLiczbaZespolona.h
 *
 * Version: $Id: DuzaLiczbaZespolona.h 88 2012-01-17 21:29:19Z s8376@pjwstk.edu.pl $
 */

#ifndef DUZALICZBAZESPOLONA_H_
#define DUZALICZBAZESPOLONA_H_

#include "DuzaLiczba.h"

class DuzaLiczbaZespolona
{
    private:
        DuzaLiczba* m_real;
        DuzaLiczba* m_imagine;
    public:
        /**
         * Konstruktor bezargumentowy inicjalizuje obiekt wartością (0,0)
         */
        DuzaLiczbaZespolona();
        /**
         * Konstruktor z argumentem typu int inicjalizuje obiekt wartością stało-liczbową (172834,0)
         */
        DuzaLiczbaZespolona(int real);
        /**
         * Konstruktor z dwoma argumentami typu int inicjalizuje inicjalizuje obiekt wartością (134,394)
         */
        DuzaLiczbaZespolona(int real, int imagine);
        /**
         * Konstruktor z argumentem typu char* inicjalizuje obiekt podaną
         * wartością (“1728390”)
         */
        DuzaLiczbaZespolona(char* real);
        /**
         * Konstruktor z argumentem typu char* inicjalizuje obiekt podaną wartością (17283,-420)
         */
        DuzaLiczbaZespolona(char* real, char* imagine);
        /**
         * Konstruktor z dwoma obiektami
         */
        DuzaLiczbaZespolona(DuzaLiczba, DuzaLiczba);
        /**
         * Konstruktor kopiujący głęboko
         */
        DuzaLiczbaZespolona(const DuzaLiczbaZespolona& object);
        /**
         * Destruktor
         */
        ~DuzaLiczbaZespolona();
        /**
         * Operatory
         */
        DuzaLiczbaZespolona& operator=(const DuzaLiczbaZespolona&);
        DuzaLiczbaZespolona& operator=(int);
        DuzaLiczbaZespolona operator+(DuzaLiczbaZespolona);
        DuzaLiczbaZespolona operator-(DuzaLiczbaZespolona);
        DuzaLiczbaZespolona operator-();
        DuzaLiczbaZespolona operator*(DuzaLiczbaZespolona);
        DuzaLiczbaZespolona operator/(DuzaLiczbaZespolona);

        DuzaLiczbaZespolona& operator+=(DuzaLiczbaZespolona const&);
        DuzaLiczbaZespolona& operator+=(int);
        DuzaLiczbaZespolona& operator-=(DuzaLiczbaZespolona const&);
        DuzaLiczbaZespolona& operator*=(DuzaLiczbaZespolona const&);
        DuzaLiczbaZespolona& operator/=(DuzaLiczbaZespolona const&);

        friend bool operator==(const DuzaLiczbaZespolona&, const DuzaLiczbaZespolona&);
        friend bool operator==(const DuzaLiczbaZespolona&, int);
        friend bool operator!=(const DuzaLiczbaZespolona&, const DuzaLiczbaZespolona&);

        bool operator>=(int) const;
        bool operator<(const char*) const;

        friend ostream& operator<<(ostream&, const DuzaLiczbaZespolona&);
        friend istream& operator>>(istream&, DuzaLiczbaZespolona&);
};

#endif /* DUZALICZBAZESPOLONA_H_ */
